# 变量
# 命名规则：大小写字母、数字、下划线_，不能以数字开头，不能是关键字（保留字）

# 查看关键字
import keyword

print(keyword.kwlist)
# 定义一个变量
# 直接取一个变量名即可，但要注意：变量一旦定义就需要赋值
# 不需要类型修饰，可以动态的根据所赋予的值自动判断变量类型
i = 1
a = 2
print(type(a))  # 查看变量的类型
# 1c = 3 # 不能以数字开头
# stu # 定义的时候需要赋值
a = 'abc'
print(type(a))

# 这是单行注释 相当于java中的 //
# 多行注释一般用于文档说明
'''三个成对的单引号 相当于Java中的/* */
多行注释
多行注释
多行注释
'''
"""三个成对的双引号 相当于Java中的/* */
多行注释
多行注释
多行注释
"""

# print函数
# sep：分隔符
# end：设置换行符
print(1, 2, 3, 4)  # 1 2 3 4
print(1, 2, 3, 4, sep='|')  # 1|2|3|4
print(5, end="")  # 不换行
print(6)

# 五大基本数据类型
# 整型int、浮点float、字符串str、布尔bool、空类型NoneType

i = 1
f = 1.1
str1 = 'abc'  # Python中没有char字符类型，统一为字符串
bool1 = True
bool2 = False
none1 = None
print(type(i))
print(type(f))
print(type(str1))
print(type(bool1))
print(type(bool2))
print(type(none1))

# 类型转换
# int()、float()、str()、bool() 四个方法
# 需要转成什么类型 即调用对应类型的方法
# 注意 类型转换的时候 是否符合对应类型的要求 例如：abc 转 int 会抛出异常
# 注意 print("abc"+123) 会抛出异常
str2 = '123'
print(str2, type(str2))
# str to int
str2int = int(str2)
print(str2int, type(str2int))
# float to str
f1 = 1.234
float2str = str(f1)
print(float2str, type(float2str))

# int\float\str to bool
# 对于数值型的变量转bool 除零以外都是True
# 对于字符串类型的变量转bool 除空字符串以外都是True
print(bool(1))  # True
print(bool(0))  # False
print(bool(-100))  # True
print(bool(-0))  # False
print(bool(1.1))  # True
print(bool(0.0))  # False
print(bool("False"))  # True
print(bool("True"))  # True
print(bool("abc"))  # True
print(bool(""))  # False

# 算数运算符
# + - * / % ** //
a = 10
b = 4
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b)  # 取余数
print(a ** b)  # 10的4次方
print(10 // 3)  # 向下取整（直接舍弃余数）

# 逻辑运算符
# & | not ^
bool1 = True
bool2 = False
print(bool1 & bool2)  # 与
print(bool1 and bool2)  # 与
print(bool1 | bool2)  # 或
print(bool1 or bool2)  # 或
print(not bool2)  # 取反
print(bool1 ^ bool2)  # 异或

# 格式化字符串
# 第一种方式：
# %d : 整数
# %f : 小数
# %s : 字符串
# 3 * 2 = 6
a = 3
b = 2
c = 6.00000
print("%d %s %d = %0.3f" % (a, "*", b, c))

# 第二种方式
# {} * {} = {}
format1 = "{} * {} = {}"
print(format1.format(3, 3, 9))
